import * as underscore from './utils/underscore';

// 惰性函数
// 需求：foo 返回首次调用的Date对象

// 普通方法
// var t;
// function foo () {
//   if (t) return t;
//   t = new Date();
//   return t;
// }

// console.log(foo());
// console.log(foo());
// console.log(foo());
// console.log(foo());

// 闭包
// var foo = function () {
//   var t;
//   return function () {
//     if (t) return t;
//     t = new Date();
//     return t;
//   }
// }();

// console.log(foo());
// setTimeout(() => {
//   console.log(foo());
// }, 2000);
// 函数对象
// function foo () {
//   if (foo.t) return foo.t;
//   foo.t = new Date();
//   return foo.t;
// }

// console.log(foo());
// console.log(foo());
// console.log(foo());
// console.log(foo());

// 惰性函数 - 重写函数
// var foo = function () {
//   var t = new Date();
//   foo = function () {
//     return t;
//   }
//   return foo();
// }

// console.log(foo());

// setTimeout(() => {
//   console.log(foo());
// }, 2000)

// 更多应用
// 简化写法
// function addEvent (type, el, fn) {
//   if (window.addEventListener) {
//     el.addEventListener(type, fn, false);
//   } else {
//     el.attachEvent('on' + type, fn);
//   }
// }

// function addEvent (type, el, fn) {
//   if (window.addEventListener) {
//     addEvent = function (type, el, fn) {
//       el.addEventListener(type, fn, false);
//     }
//   } else if (window.attachEvent) {
//     addEvent = function (type, el, fn) {
//       el.attachEvent('on' + type, fn);
//     }
//   }
// }

// 

// 闭包
var addEvent = function () {
  if (window.addEventListener) {
    return function (type, el, fn) {
      el.addEventListener(type, fn, false);
    }
  } else if (window.attachEvent) {
    return function (type, el, fn) {
      el.attachEvent('on' + type, fn);
    }
  }
}();

console.log(addEvent);